Matching the bouy data to the other data collected

hilo <- hbb_wku_h_xts
hilo <- data.frame(date=index(hilo), coredata(hilo))
hilo <- hilo[529:54816,]
hilo
# which(hilo$date=="2010-10-23 00:00:00") = index 529 

# which(hilo$date=="2016-12-31 23:00:00") = index 54816
length(hilo[,1]) # we are left with 54288 lines of data
[1] 54288
54816 - length(hilo[,1]) # we lost 528 values 
[1] 528

Changing column names

# removing columns that we are not using 
hilo$date.2 <- NULL # another date column
hilo$date.1 <- NULL # another date column
hilo$BGARFU <- NULL # ?
hilo$cfs <- NULL
hilo$DOmgL <- NULL # dissolved oxygen
#hilo$Doper <- NULL # dissolved oxygen
hilo$PAR1 <- NULL # ?
hilo$pH <- NULL # pH
hilo$NTU <- NULL # a different measurement for turbitity
hilo$DOper10 <- NULL # dissolved oxygen

# colnames(hilo) <- c("Date", "cfs", "RiverFlow-cumec", "LogRiverFlow-cumec", "Chlorophyll-RFU", "Salinity-PPT", "Temp-C", "chlorophyll-calibrator", "Turbidity-NTU")
# does not work ???

hilo

====================================================

FULL DATA SET 2012-2016

Descriptives: PLots

River Flow FULL DATA SET

length(hilo$logcms[which(is.na(hilo$logcms)==TRUE)]) # 12 NAs 
[1] 12
which(is.na(hilo$logcms)==TRUE)
 [1] 50509 50510 50511 50512 50513 50514 50515 50516 50517 50518 50519
[12] 50520
RiverFlow <- ggplot(hilo,  aes(x = date, y = as.numeric(cms))) + 
  geom_line()

print(RiverFlow + ggtitle("River Flow")+labs(x="Time", y = "River Flow - cubic meters per second"))

CHL FULL DATA SET

length(hilo$ChlRFU[which(is.na(hilo$ChlRFU)==TRUE)]) # 20464 NAs
[1] 20464
which(as.numeric(hilo$ChlRFU)==max(as.numeric(na.omit(hilo$ChlRFU)))) # 15.3 max 
[1] 38974
# CHL tells us where in the data set this happened  
hilo[38974,]

CHL <- ggplot(hilo,  aes(x = date, y = as.numeric(ChlRFU))) + 
  geom_line()

print(CHL + ggtitle("Chlorophyll ")+labs(x="Time", y = "Chlorophyll  - relative fluorescence units (RFU)"))

Turbity FULL DATA SET

length(hilo$Corr.NTU[which(is.na(hilo$Corr.NTU)==TRUE)]) #15012 NAs
[1] 15012
which(as.numeric(hilo$Corr.NTU)==max(as.numeric(na.omit(hilo$Corr.NTU)))) # 88.4
[1] 33243
# tells us where in the data set this happened
hilo[33243,]

TURB <- ggplot(hilo,aes(x = date, y = as.numeric(Corr.NTU))) + 
  geom_line()

print(TURB + ggtitle("Turbidity ")+labs(x="Time", y = "Turbidity - Nephelometric Turbidity Units (NTU)"))

Salinity FULL DATA SET

length(hilo$saltppt[which(is.na(hilo$saltppt)==TRUE)]) #11330 NAs
[1] 0
SALT <- ggplot(hilo,  aes(x = date, y = as.numeric(saltppt))) + 
  geom_line()

print(SALT + ggtitle("Salinity")+labs(x="Time", y = "Salinity - unit parts per thousand (PPT)"))
Error in FUN(X[[i]], ...) : object 'saltppt' not found

======================================================== # Histograms FULL DATA SET ## River Flow Histogram

CHL Histogram

Turbity Histogram

Salinity Histogram

========================================================= # NEW DATA SET-Modified Data 2013-2015

# start date: 2013-01-01 00:00:00
# end date: 2015-12-31 23:00:00
hilomodified <- hilo[19225:45504,]
length(hilo[,1])-length(hilomodified[,1])
[1] 28008
# lost 28008 entries of data 

length(hilomodified[,1])-528 # we are left with 25752 entries of data 
[1] 25752
head(hilomodified)
tail(hilomodified)
NA

Descriptives on all variables MODIFIED DATA SET: Using Favstats

River Flow Favstats

CHL Favstats

Turbitity Favstats

Salinity Favstats

===================================================== # MODIFIED DATA SET 2013-2015 # Descriptives: Plots

River Flow MODIFIED

CHL MODIFIED

Turbitity MODIFIED

Salinity MODIFIED

Tempurature MODIFIED

Dissolved Oxygen MODIFIED

length(hilomodified$Doper[which(is.na(hilomodified$Doper)==TRUE)]) # 2267 NAs

TempMod <- ggplot(hilomodified,  aes(x = date, y = as.numeric(Doper))) + 
  geom_line()

print(TempMod + ggtitle("Dissolved Oxygen")+labs(x="Time", y = "Dissolved Oxygen in percent of saturation"))

=================================================== # Histograms MODIFIED

River Flow MODIFIED

hist(as.numeric(hilomodified$cms), main = "Histogram of Log River Flow", xlab = "Log River Flow", breaks =90, xlim = c(0,100))


# this looks okay

CHL MODIFIED

Turbitity MODIFIED

Salinity MODIFIED

# skewed
hist(as.numeric(hilomodified$saltppt), main = "Histogram of Salinity", xlab = "Salinity - unit parts per thousand (PPT)")

# this is worst!
hist(log(as.numeric(hilomodified$saltppt)), main = "Histogram of Log Salinity", xlab = "Salinity")
# not sure what happens to units when taking the log 

=============================================================

Plot with ALL Var 2013-2015

It is hard to see what is going on

============================================================== # Descriptives by Storm We are picking one storm from each year. We can indicate a storm has occurred by the extreme events in the river flow data. We will not use the log (which is logbase10) in order to see the extreme events When salinity is below 35 this also indicates a storm has occurred.

We will break the data set by year to find the most extreme event for each year.

2013 Data & Plot

Split 2013 into 6 months to get a better visual

2014 Data & Plot

2015 Data & Plot

# Separating the Data by Storm Events

Separating the Data by Storm

Trying to make the Rainfall plot easier to read

RiverFlow1 <- ggplot(hilomodified[1:100,],  aes(x = date, y = as.numeric(cms))) + 
  geom_line()

print(RiverFlow + ggtitle("River Flow")+labs(x="Time", y = "River Flow - cubic meters per second"))

=======

NEW Change in River Flow Column

length(end)
[1] 72
for(i in 1:length(start)){
  storm <- ggplot(hilomodified[(start[i]-24):(end[i]+24),],  aes(x = date, y = as.numeric(cms))) +
  geom_line(color="black")+
  geom_line(aes(y = as.numeric(Corr.NTU)), color="grey69") +
  geom_line(aes(y=as.numeric(ChlRFU)),color="khaki")

print(storm + ggtitle("Storm 1/7/13")+labs(x="Time"))
}

ChangeRF <- function(x = vector()){
change <- c(0)
  for(i in 1:(length(x)-1)){
    change[i+1] <- x[i]-x[i+1]
  }
  return(change)
}
change.vector <- c(ChangeRF(as.numeric(hilomodified$cms)))
change.vector
   [1]   0.00000   0.02124   0.02832   0.02124   0.02832
   [6]   0.00708   0.00000   0.02124   0.02124   0.02832
  [11]   0.01416   0.00000   0.00708   0.00708   0.01416
  [16]   0.02124   0.00708   0.00708   0.01416   0.03540
  [21]   0.00000   0.01416   0.00000   0.02832   0.02124
  [26]   0.02124   0.00000   0.01416   0.01416   0.00000
  [31]   0.00000   0.00000   0.02832  -0.00708   0.02124
  [36]   0.00000   0.01416   0.02124   0.00000   0.02124
  [41]   0.01416   0.00000   0.00000   0.00708   0.00708
  [46]   0.00708   0.02832   0.00708   0.00708   0.01416
  [51]   0.00000   0.00708   0.00000   0.00000   0.02124
  [56]   0.00000   0.01416   0.02124  -0.01416   0.01416
  [61]   0.00000   0.00000   0.00708   0.02124   0.00708
  [66]   0.00708   0.01416   0.00000   0.00000   0.00708
  [71]   0.02832   0.00708   0.00708   0.00708   0.01416
  [76]   0.00000   0.00000  -0.01416   0.01416   0.01416
  [81]   0.00000   0.00000   0.00000   0.00000   0.00000
  [86]  -0.00708  -0.02832  -0.04248  -0.00708   0.00000
  [91]  -0.02124  -0.02832  -0.04248  -0.02124  -0.01416
  [96]  -0.02124  -0.02124   0.01416   0.03540   0.00708
 [101]   0.00000   0.00708   0.00708  -0.19116  -0.25488
 [106]  -0.29028  -0.16284   0.09204  -0.33984  -0.44604
 [111]   0.04956   0.16284   0.12036  -0.11328  -0.22656
 [116]  -0.27612  -0.31152  -1.13988  -1.58592   0.59472
 [121]   0.67968   0.49560   0.14160   0.00708   0.21948
 [126]   0.04248  -0.41064  -0.95580  -0.45312   0.32568
 [131]   0.53100   0.54516   0.56640   0.32568   0.29736
 [136]   0.06372  -0.45312  -0.82836  -0.63720  -1.22484
 [141]  -1.92576  -2.30100  -2.73996  -1.72044  -0.54516
 [146]  -0.25488  -0.09912  -0.43896  -1.32396  -1.54344
 [151]  -1.43724  -1.09032  -0.55224  -0.10620   0.44604
 [156]   0.92748   1.83372   2.47092   2.03196   1.81248
 [161]   1.60008   1.35228   1.06908   0.86376   0.75756
 [166]   0.66552   0.54516   0.43188   0.43896   0.31860
 [171]   0.26196   0.24780   0.19116   0.16992   0.09912
 [176]   0.13452   0.04956   0.09912   0.02124   0.04956
 [181]   0.02832   0.03540   0.00000   0.05664   0.02124
 [186]   0.02832   0.02832   0.04248  -0.00708   0.00708
 [191]  -0.07788  -0.12036  -0.04956  -0.16284  -0.12036
 [196]  -0.21240  -0.20532  -0.25488  -0.80004   0.01416
 [201]   0.05664  -0.24780  -0.41064   0.06372   0.24780
 [206]   0.27612   0.22656   0.24780   0.12036   0.02832
 [211]  -0.35400  -1.84080  -5.09760  -6.35784 -10.52088
 [216]  -4.71528   3.39840   4.29756   3.27096   2.61252
 [221]   2.20188   1.98948   1.67088   1.46556   1.35228
 [226]   1.20360   1.00536   0.80004   0.75048   0.56640
 [231]   0.51684   0.40356   0.40356   0.34692   0.24780
 [236]   0.02124   0.00708   0.14868   0.10620   0.19116
 [241]   0.14160   0.12036   0.11328   0.09204   0.05664
 [246]   0.03540   0.05664   0.02124   0.06372   0.07080
 [251]   0.02124   0.02832   0.04956   0.03540   0.04956
 [256]   0.02124   0.01416   0.04956   0.04248   0.04248
 [261]   0.02124   0.04956   0.01416   0.03540   0.02832
 [266]   0.04248   0.03540   0.02124   0.04956   0.03540
 [271]   0.00708   0.05664   0.04248   0.02832   0.03540
 [276]   0.03540   0.04248   0.02832   0.02124   0.02832
 [281]   0.03540   0.03540   0.03540   0.02124   0.05664
 [286]   0.01416  -0.04956  -0.18408   0.14160   0.07788
 [291]  -0.04956  -0.09912  -0.19824  -0.23364  -0.36108
 [296]  -0.16284   0.06372   0.14868   0.19116   0.18408
 [301]   0.14868   0.11328   0.08496   0.05664   0.07080
 [306]   0.04248   0.02832   0.02832   0.02832   0.05664
 [311]   0.02832   0.00708   0.04248   0.00708   0.02124
 [316]   0.02832   0.02832   0.02832   0.01416   0.02832
 [321]   0.01416   0.01416   0.01416   0.02832   0.01416
 [326]   0.02124   0.01416   0.00708   0.00000   0.03540
 [331]   0.01416   0.02124   0.02124   0.01416   0.00708
 [336]   0.01416   0.00708   0.02832   0.01416   0.02124
 [341]   0.00000   0.00708   0.00000   0.02832   0.01416
 [346]   0.02124  -0.00708   0.02832  -0.00708   0.02124
 [351]   0.00708   0.00000   0.00000   0.02124   0.00708
 [356]   0.00708   0.01416   0.00708   0.00708   0.02124
 [361]   0.00708   0.03540   0.00000   0.00708   0.02124
 [366]   0.01416   0.00000   0.02124   0.01416   0.00708
 [371]   0.01416   0.00000   0.02832  -0.02124   0.01416
 [376]   0.00708  -0.01416   0.00708   0.02124   0.00000
 [381]   0.01416   0.00000   0.00708  -0.00708   0.02124
 [386]   0.01416   0.02124   0.00708   0.00708   0.01416
 [391]   0.00000   0.02124   0.00000   0.00708   0.00000
 [396]   0.02124  -0.01416   0.02124   0.00708   0.01416
 [401]   0.00708   0.01416   0.00000   0.01416   0.00000
 [406]   0.00000   0.02124   0.00708   0.00000   0.00708
 [411]   0.00708   0.01416   0.00000   0.00000   0.00000
 [416]   0.02124  -0.01416   0.02832   0.00000   0.01416
 [421]   0.00708   0.00000   0.00000   0.00000   0.00000
 [426]   0.00708   0.01416   0.01416   0.00708   0.01416
 [431]   0.01416   0.00708  -0.00708   0.01416   0.00000
 [436]   0.00000   0.00708   0.01416  -0.07080  -0.56640
 [441]   0.01416   0.21948   0.16284   0.10620   0.05664
 [446]   0.04956   0.02124   0.01416   0.01416   0.02124
 [451]   0.01416   0.00708   0.00000   0.00708   0.00708
 [456]   0.01416   0.02124   0.00000   0.00708   0.00000
 [461]   0.00000   0.00000   0.00000   0.01416   0.00708
 [466]   0.00708   0.00000   0.00000   0.00000   0.00000
 [471]   0.00000   0.00708   0.01416   0.00708   0.00708
 [476]   0.00708   0.01416   0.00000   0.00000   0.00000
 [481]   0.00000   0.00708   0.00708   0.01416   0.00000
 [486]   0.00000   0.00000   0.00000   0.00000   0.01416
 [491]   0.00000   0.01416   0.00000   0.00000   0.01416
 [496]   0.00708   0.00708   0.00000   0.00000   0.00000
 [501]   0.00000   0.00000   0.01416   0.00708   0.00708
 [506]   0.00000   0.00000   0.00000   0.00000   0.00000
 [511]   0.00000   0.00000   0.00708   0.01416   0.00000
 [516]   0.00000   0.00708   0.00000   0.00000   0.00000
 [521]   0.00000   0.00000   0.01416   0.01416   0.00000
 [526]   0.00000   0.00000   0.00000   0.00000   0.00000
 [531]   0.00000   0.00708   0.00000   0.00708   0.00708
 [536]   0.00000   0.00000   0.00708   0.00000   0.00000
 [541]   0.00000   0.00000  -0.00708   0.00708   0.00000
 [546]   0.00000   0.00000   0.00000   0.01416   0.01416
 [551]  -0.01416   0.00708   0.00000  -0.01416   0.00708
 [556]   0.00000  -0.01416   0.00000  -0.02124  -0.00708
 [561]   0.00000   0.00000   0.00000   0.00000   0.00000
 [566]   0.00000   0.00000   0.02832   0.00000   0.00000
 [571]   0.02124   0.00708   0.00000   0.00708  -0.00708
 [576]   0.00000   0.01416  -0.00708  -0.01416  -0.02124
 [581]  -0.00708  -0.01416  -0.00708   0.00000  -0.02124
 [586]  -0.00708   0.00000   0.00000   0.00000   0.00708
 [591]   0.01416   0.00708   0.01416   0.01416   0.00708
 [596]   0.02124   0.00000   0.00000   0.00708   0.02124
 [601]   0.00000   0.00000   0.00708   0.00708   0.01416
 [606]   0.00000   0.00000   0.00000   0.00000   0.00000
 [611]   0.00000   0.01416   0.01416   0.00000   0.00000
 [616]   0.00000   0.00000   0.00000   0.00000   0.00708
 [621]   0.00708   0.01416   0.00000   0.00000   0.00000
 [626]   0.00000   0.00000   0.00000   0.00000   0.00000
 [631]   0.00000   0.00000   0.00000   0.00000   0.00708
 [636]  -0.00708   0.02832  -0.00708   0.00708   0.00000
 [641]   0.00000   0.00000   0.00000   0.00000   0.00708
 [646]  -0.00708   0.00000   0.00708   0.00708   0.01416
 [651]  -0.00708   0.00708   0.00000   0.00000   0.00000
 [656]   0.00000  -0.07080  -0.14868   0.00000   0.04248
 [661]   0.04956   0.04248   0.02832   0.02124   0.00708
 [666]   0.02124   0.00708   0.00000   0.00000   0.01416
 [671]   0.00708   0.00708   0.00000   0.00000   0.00000
 [676]   0.00000   0.00000   0.00000   0.00000   0.00000
 [681]   0.00000   0.00000   0.00000   0.00000   0.00000
 [686]   0.00000   0.00000   0.00000  -0.04956  -0.08496
 [691]  -0.33984  -0.17700   0.19824   0.13452   0.06372
 [696]   0.02832   0.02832   0.02832   0.02832   0.02124
 [701]   0.02124   0.01416   0.02124   0.00708   0.00000
 [706]   0.00708   0.02124   0.00000   0.00000   0.00708
 [711]   0.00708   0.01416  -0.00708  -0.01416   0.00708
 [716]   0.01416   0.00000   0.00000   0.00000   0.00000
 [721]   0.00000   0.00000   0.00000   0.01416   0.00708
 [726]   0.00000   0.00708   0.00000  -0.02124   0.00708
 [731]   0.01416   0.00000   0.00000   0.00000   0.00000
 [736]   0.00000   0.00000   0.00000   0.00000   0.00000
 [741]   0.02124   0.00708   0.00000   0.00000   0.00000
 [746]   0.00000  -0.02124  -0.02124  -0.06372  -0.08496
 [751]  -0.10620  -0.14868  -0.46020  -0.33984  -0.02124
 [756]   0.09912   0.19116   0.15576   0.12744   0.09912
 [761]   0.07788   0.07788   0.05664   0.03540   0.03540
 [766]   0.02832   0.02832   0.02124   0.02124   0.01416
 [771]   0.02124   0.00708   0.02832   0.00000   0.00708
 [776]   0.02124   0.00000   0.00000   0.00708   0.02124
 [781]   0.00000   0.00000   0.00000   0.02124   0.00708
 [786]   0.00000   0.00000   0.00000   0.00000   0.00708
 [791]   0.01416   0.00708   0.00000   0.00000   0.00000
 [796]   0.00000   0.00000   0.00000   0.00000   0.00000
 [801]   0.00000   0.00708   0.00000   0.02124  -0.01416
 [806]   0.00708   0.00708   0.00000   0.00000   0.00000
 [811]   0.00000   0.00000   0.00000   0.00000   0.00708
 [816]   0.00000  -0.02124  -0.08496  -0.04248   0.00000
 [821]   0.00000   0.00000   0.00000   0.00000   0.00000
 [826]   0.00000   0.00000   0.00000   0.01416   0.00000
 [831]  -0.00708   0.02124  -0.02124  -0.03540   0.02832
 [836]   0.02832   0.00000   0.00708  -0.00708   0.02124
 [841]  -0.01416  -0.00708   0.00000  -0.01416  -0.04956
 [846]  -0.02124  -0.02832  -0.03540  -0.03540  -0.04956
 [851]  -0.12036  -0.07080  -0.14160  -0.09912  -0.01416
 [856]   0.04956   0.04956   0.06372   0.05664   0.00000
 [861]   0.00708   0.00000   0.00708   0.01416   0.00708
 [866]  -0.00708   0.00000   0.00708   0.00000   0.00000
 [871]   0.00000   0.00708   0.01416   0.02124   0.01416
 [876]   0.01416   0.01416   0.00708   0.02124   0.00000
 [881]   0.00708  -0.00708  -0.04956  -0.03540  -0.47436
 [886]  -2.93112  -4.42500   1.09032   0.65844   0.18408
 [891]  -1.51512  -5.38788 -10.78992 -15.70344  -2.61960
 [896]   6.15960   6.93840   4.41792   4.63032   3.46920
 [901]   2.68332   1.99656   1.49388   1.43724   2.80368
 [906]  -0.43896   0.39648   0.50976   0.41772   0.29736
 [911]   0.30444   0.23364   0.16992   0.03540   0.11328
 [916]   0.17700   0.13452   0.16284   0.16992   0.07080
 [921]   0.09204   0.12744   0.07080   0.08496   0.09912
 [926]   0.10620   0.07788   0.07788   0.07080   0.07788
 [931]   0.07788   0.09912   0.07080   0.04248   0.07080
 [936]   0.08496   0.06372   0.05664   0.04956   0.04956
 [941]   0.04248   0.04956   0.04248   0.04956   0.02832
 [946]   0.04956   0.01416   0.02832   0.04248   0.03540
 [951]  -0.02832  -0.00708   0.01416  -0.04248  -0.22656
 [956]  -0.43188  -0.77880  -0.53100  -0.30444  -0.81420
 [961]  -1.50096  -1.16820  -0.21240  -0.11328   0.22656
 [966]   0.46020   0.49560   0.46728   0.47436   0.41064
 [971]   0.58764   0.67968   0.36108   0.23364   0.15576
 [976]   0.13452   0.07788   0.12744   0.07788   0.12036
 [981]   0.08496   0.06372   0.07080   0.10620   0.02124
 [986]  -0.00708   0.08496   0.07080   0.03540   0.05664
 [991]   0.02124   0.06372   0.05664   0.04956   0.04248
 [996]   0.03540   0.03540   0.04956   0.02124   0.04248
 [ reached getOption("max.print") -- omitted 25280 entries ]
length(ChangeRF(as.numeric(hilomodified$cms)))
[1] 26280
length(hilomodified$cms) # same length
[1] 26280
hilomodified$changeCMS <- change.vector

head(hilomodified)
# 10-11 negative start of storm
# 11-10 positive end of storm

positive.change <- vector()
negative.change <- vector()
index <- vector()


for(i in 1:length(hilomodified$cms)){
  if (hilomodified$changeCMS[i] < 0 ){
    negative.change[i] <- i
  }else{
    if(hilomodified$changeCMS[i] > 0){
      postive.change[i] <- i
    }
  }
  if(hilomodified$cms[i] >= 10 ){
    index[i] <- i
  }
}
index
positive.change
negative.change
length(which(index > 0)) 

storms <- sort(c(positive.change,negative.change), decreasing = FALSE)
storms
hilostorms <- hilomodified[storms,]
hilostorms
storm <- ggplot(hilostorms[50:250,],  aes(x = date, y = as.numeric(cms))) +
  geom_line(color="black")+
  geom_line(aes(y = as.numeric(Corr.NTU)), color="grey69") +
  geom_line(aes(y=as.numeric(ChlRFU)),color="khaki")

print(storm + ggtitle("Storm 1/7/13")+labs(x="Time"))


vector <- vector()
for(i in 1:length(storms)){
  if(isTRUE(abs(storms[i]-storms[i+1]) > 10)){
    stop <- storms[i]
  }else{
    stop <- 0
  }
  if(stop > 0){
    vector[i] <- stop
  }
}
vector[which(is.na(vector)==FALSE)]
  [1]   622   672  1706  1898  1924  1970  2081  2327  2388
 [10]  2429  2469  2493  2515  2537  2576  2714  2734  2772
 [19]  2799  2825  2866  2947  2998  3051  3068  3130  3196
 [28]  3211  3226  3249  3373  3746  3841  3856  3898  4343
 [37]  4412  4438  4460  4507  4534  4617  4660  4827  5006
 [46]  5087  5107  5135  5237  5667  5690  5735  5767  5786
 [55]  5837  5851  5888  5900  5921  5968  6048  6068  6092
 [64]  6240  6270  6284  6320  6363  6379  6456  6488  6599
 [73]  6630  6864  6888  6908  6945  6959  6977  6999  7025
 [82]  7063  7076  7099  7134  7150  7222  7308  7443  7466
 [91]  7493  7678  7703  7733  7786  7805  7840  7863  7882
[100]  7933  7960  7978  8005  8031  8124  8167  8954  9013
[109]  9067  9091  9135  9160  9188  9256  9280  9303  9333
[118]  9377  9487  9505 10205 12119 12216 12238 13083 13095
[127] 14759 14786 14812 14831 14891 14946 14998 15028 15079
[136] 15099 15125 15140 15165 15187 15209 15526 15540 15553
[145] 15702 17365 17482 17512 17533 17585 17612 17657 17708
[154] 17734 17778 17811 17838 17871 17925 17978 18210 18233
[163] 18358 18888 18905 18921 19117 19192 19225 19269 19322
[172] 19342 19362 19378 19490 19504 19522 19628 21792 21813
[181] 21948 21981 22016 22075 22124 22220 23568
storm.1.7.13 <- ggplot(hilomodified[1:80,],  aes(x = date, y = as.numeric(cms))) +
  geom_line(color="black")+
  geom_line(aes(y = as.numeric(Corr.NTU)), color="grey69") +
  geom_line(aes(y=as.numeric(ChlRFU)),color="khaki")

print(storm.1.7.13 + ggtitle("Storm 1/7/13")+labs(x="Time"))

LS0tCnRpdGxlOiAiRGF0YSBDbGVhbmluZyAmIERlc2NyaXB0aXZlcyIKYXV0aG9yOiAiQnJpYW5uYSBDaXJpbGxvICYgT2RhbHlzIEJhcnJpZW50b3MiCm91dHB1dDogaHRtbF9ub3RlYm9vawotLS0KIyBNYXRjaGluZyB0aGUgYm91eSBkYXRhIHRvIHRoZSBvdGhlciBkYXRhIGNvbGxlY3RlZCAKYGBge3J9CmhpbG8gPC0gaGJiX3drdV9oX3h0cwpoaWxvIDwtIGRhdGEuZnJhbWUoZGF0ZT1pbmRleChoaWxvKSwgY29yZWRhdGEoaGlsbykpCmhpbG8gPC0gaGlsb1s1Mjk6NTQ4MTYsXQpoaWxvCiMgd2hpY2goaGlsbyRkYXRlPT0iMjAxMC0xMC0yMyAwMDowMDowMCIpID0gaW5kZXggNTI5IAoKIyB3aGljaChoaWxvJGRhdGU9PSIyMDE2LTEyLTMxIDIzOjAwOjAwIikgPSBpbmRleCA1NDgxNgpgYGAKYGBge3J9Cmxlbmd0aChoaWxvWywxXSkgIyB3ZSBhcmUgbGVmdCB3aXRoIDU0Mjg4IGxpbmVzIG9mIGRhdGEKCjU0ODE2IC0gbGVuZ3RoKGhpbG9bLDFdKSAjIHdlIGxvc3QgNTI4IHZhbHVlcyAKYGBgCgojIENoYW5naW5nIGNvbHVtbiBuYW1lcyAKYGBge3J9CiMgcmVtb3ZpbmcgY29sdW1ucyB0aGF0IHdlIGFyZSBub3QgdXNpbmcgCmhpbG8kZGF0ZS4yIDwtIE5VTEwgIyBhbm90aGVyIGRhdGUgY29sdW1uCmhpbG8kZGF0ZS4xIDwtIE5VTEwgIyBhbm90aGVyIGRhdGUgY29sdW1uCmhpbG8kQkdBUkZVIDwtIE5VTEwgIyA/CmhpbG8kY2ZzIDwtIE5VTEwKaGlsbyRET21nTCA8LSBOVUxMICMgZGlzc29sdmVkIG94eWdlbgojaGlsbyREb3BlciA8LSBOVUxMICMgZGlzc29sdmVkIG94eWdlbgpoaWxvJFBBUjEgPC0gTlVMTCAjID8KaGlsbyRwSCA8LSBOVUxMICMgcEgKaGlsbyROVFUgPC0gTlVMTCAjIGEgZGlmZmVyZW50IG1lYXN1cmVtZW50IGZvciB0dXJiaXRpdHkKaGlsbyRET3BlcjEwIDwtIE5VTEwgIyBkaXNzb2x2ZWQgb3h5Z2VuCgojIGNvbG5hbWVzKGhpbG8pIDwtIGMoIkRhdGUiLCAiY2ZzIiwgIlJpdmVyRmxvdy1jdW1lYyIsICJMb2dSaXZlckZsb3ctY3VtZWMiLCAiQ2hsb3JvcGh5bGwtUkZVIiwgIlNhbGluaXR5LVBQVCIsICJUZW1wLUMiLCAiY2hsb3JvcGh5bGwtY2FsaWJyYXRvciIsICJUdXJiaWRpdHktTlRVIikKIyBkb2VzIG5vdCB3b3JrID8/PwoKaGlsbwpgYGAKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiMgRlVMTCBEQVRBIFNFVCAyMDEyLTIwMTYKIyBEZXNjcmlwdGl2ZXM6IFBMb3RzCgojIyBSaXZlciBGbG93IEZVTEwgREFUQSBTRVQKYGBge3J9Cmxlbmd0aChoaWxvJGxvZ2Ntc1t3aGljaChpcy5uYShoaWxvJGxvZ2Ntcyk9PVRSVUUpXSkgIyAxMiBOQXMgCndoaWNoKGlzLm5hKGhpbG8kbG9nY21zKT09VFJVRSkKClJpdmVyRmxvdyA8LSBnZ3Bsb3QoaGlsbywgIGFlcyh4ID0gZGF0ZSwgeSA9IGFzLm51bWVyaWMoY21zKSkpICsgCiAgZ2VvbV9saW5lKCkKCnByaW50KFJpdmVyRmxvdyArIGdndGl0bGUoIlJpdmVyIEZsb3ciKStsYWJzKHg9IlRpbWUiLCB5ID0gIlJpdmVyIEZsb3cgLSBjdWJpYyBtZXRlcnMgcGVyIHNlY29uZCIpKQpgYGAKIyMgQ0hMIEZVTEwgREFUQSBTRVQKYGBge3J9Cmxlbmd0aChoaWxvJENobFJGVVt3aGljaChpcy5uYShoaWxvJENobFJGVSk9PVRSVUUpXSkgIyAyMDQ2NCBOQXMKCndoaWNoKGFzLm51bWVyaWMoaGlsbyRDaGxSRlUpPT1tYXgoYXMubnVtZXJpYyhuYS5vbWl0KGhpbG8kQ2hsUkZVKSkpKSAjIDE1LjMgbWF4IAojIENITCB0ZWxscyB1cyB3aGVyZSBpbiB0aGUgZGF0YSBzZXQgdGhpcyBoYXBwZW5lZCAgCmhpbG9bMzg5NzQsXQoKQ0hMIDwtIGdncGxvdChoaWxvLCAgYWVzKHggPSBkYXRlLCB5ID0gYXMubnVtZXJpYyhDaGxSRlUpKSkgKyAKICBnZW9tX2xpbmUoKQoKcHJpbnQoQ0hMICsgZ2d0aXRsZSgiQ2hsb3JvcGh5bGwgIikrbGFicyh4PSJUaW1lIiwgeSA9ICJDaGxvcm9waHlsbCAgLSByZWxhdGl2ZSBmbHVvcmVzY2VuY2UgdW5pdHMgKFJGVSkiKSkKYGBgCiMjIFR1cmJpdHkgRlVMTCBEQVRBIFNFVApgYGB7cn0KbGVuZ3RoKGhpbG8kQ29yci5OVFVbd2hpY2goaXMubmEoaGlsbyRDb3JyLk5UVSk9PVRSVUUpXSkgIzE1MDEyIE5BcwoKd2hpY2goYXMubnVtZXJpYyhoaWxvJENvcnIuTlRVKT09bWF4KGFzLm51bWVyaWMobmEub21pdChoaWxvJENvcnIuTlRVKSkpKSAjIDg4LjQKIyB0ZWxscyB1cyB3aGVyZSBpbiB0aGUgZGF0YSBzZXQgdGhpcyBoYXBwZW5lZApoaWxvWzMzMjQzLF0KClRVUkIgPC0gZ2dwbG90KGhpbG8sYWVzKHggPSBkYXRlLCB5ID0gYXMubnVtZXJpYyhDb3JyLk5UVSkpKSArIAogIGdlb21fbGluZSgpCgpwcmludChUVVJCICsgZ2d0aXRsZSgiVHVyYmlkaXR5ICIpK2xhYnMoeD0iVGltZSIsIHkgPSAiVHVyYmlkaXR5IC0gTmVwaGVsb21ldHJpYyBUdXJiaWRpdHkgVW5pdHMgKE5UVSkiKSkKYGBgCiMjIFNhbGluaXR5IEZVTEwgREFUQSBTRVQKYGBge3J9Cmxlbmd0aChoaWxvJHNhbHRwcHRbd2hpY2goaXMubmEoaGlsbyRzYWx0cHB0KT09VFJVRSldKSAjMTEzMzAgTkFzCgpTQUxUIDwtIGdncGxvdChoaWxvLCAgYWVzKHggPSBkYXRlLCB5ID0gYXMubnVtZXJpYyhzYWx0cHB0KSkpICsgCiAgZ2VvbV9saW5lKCkKCnByaW50KFNBTFQgKyBnZ3RpdGxlKCJTYWxpbml0eSIpK2xhYnMoeD0iVGltZSIsIHkgPSAiU2FsaW5pdHkgLSB1bml0IHBhcnRzIHBlciB0aG91c2FuZCAoUFBUKSIpKQpgYGAKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiMgSGlzdG9ncmFtcyBGVUxMIERBVEEgU0VUCiMjIFJpdmVyIEZsb3cgSGlzdG9ncmFtCmBgYHtyfQpoaXN0KGFzLm51bWVyaWMoaGlsbyRsb2djbXMpLCBtYWluID0gIkhpc3RvZ3JhbSBvZiBMb2cgUml2ZXIgRmxvdyIsIHhsYWIgPSAiTG9nIFJpdmVyIEZsb3ciKQoKIyB0aGlzIGxvb2tzIG9rYXkKYGBgCiMjIENITCBIaXN0b2dyYW0KYGBge3J9CiMgVkVSWSBza2V3ZWQKaGlzdChhcy5udW1lcmljKGhpbG8kQ2hsUkZVKSwgbWFpbiA9ICJIaXN0b2dyYW0gb2YgQ2hsb3JvcGh5bGwiLCB4bGFiID0gIkNobG9yb3BoeWxsICAtIHJlbGF0aXZlIGZsdW9yZXNjZW5jZSB1bml0cyAoUkZVKSIpCgojIHRoaXMgbG9va3MgYmV0dGVyCmhpc3QobG9nKGFzLm51bWVyaWMoaGlsbyRDaGxSRlUpKSwgbWFpbiA9ICJIaXN0b2dyYW0gb2YgTG9nIENobG9yb3BoeWxsIiwgeGxhYiA9ICJDaGxvcm9waHlsbCIpCiMgbm90IHN1cmUgd2hhdCBoYXBwZW5zIHRvIHVuaXRzIHdoZW4gdGFraW5nIHRoZSBsb2cgCmBgYAojIyBUdXJiaXR5IEhpc3RvZ3JhbQpgYGB7cn0KIyBWRVJZIHNrZXdlZApoaXN0KGFzLm51bWVyaWMoaGlsbyRDb3JyLk5UVSksIG1haW4gPSAiSGlzdG9ncmFtIG9mIFR1cmJpZGl0eSIsIHhsYWIgPSAiVHVyYmlkaXR5IC0gTmVwaGVsb21ldHJpYyBUdXJiaWRpdHkgVW5pdHMgKE5UVSkiKQoKIyB0aGlzIGxvb2tzIGJldHRlcgpoaXN0KGxvZyhhcy5udW1lcmljKGhpbG8kQ29yci5OVFUpKSwgbWFpbiA9ICJIaXN0b2dyYW0gb2YgTG9nIFR1cmJpZGl0eSIsIHhsYWIgPSAiVHVyYmlkaXR5IikKIyBub3Qgc3VyZSB3aGF0IGhhcHBlbnMgdG8gdW5pdHMgd2hlbiB0YWtpbmcgdGhlIGxvZyAKYGBgCiMjIFNhbGluaXR5IEhpc3RvZ3JhbQpgYGB7cn0KIyBza2V3ZWQKaGlzdChhcy5udW1lcmljKGhpbG8kc2FsdHBwdCksIG1haW4gPSAiSGlzdG9ncmFtIG9mIFNhbGluaXR5IiwgeGxhYiA9ICJTYWxpbml0eSAtIHVuaXQgcGFydHMgcGVyIHRob3VzYW5kIChQUFQpIikKCiMgdGhpcyBpcyB3b3JzdCEKaGlzdChsb2coYXMubnVtZXJpYyhoaWxvJHNhbHRwcHQpKSwgbWFpbiA9ICJIaXN0b2dyYW0gb2YgTG9nIFNhbGluaXR5IiwgeGxhYiA9ICJTYWxpbml0eSIpCiMgbm90IHN1cmUgd2hhdCBoYXBwZW5zIHRvIHVuaXRzIHdoZW4gdGFraW5nIHRoZSBsb2cgCmBgYAoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiMgTkVXIERBVEEgU0VULU1vZGlmaWVkIERhdGEgMjAxMy0yMDE1CmBgYHtyfQojIHN0YXJ0IGRhdGU6IDIwMTMtMDEtMDEgMDA6MDA6MDAKIyBlbmQgZGF0ZTogMjAxNS0xMi0zMSAyMzowMDowMApoaWxvbW9kaWZpZWQgPC0gaGlsb1sxOTIyNTo0NTUwNCxdCmxlbmd0aChoaWxvWywxXSktbGVuZ3RoKGhpbG9tb2RpZmllZFssMV0pCiMgbG9zdCAyODAwOCBlbnRyaWVzIG9mIGRhdGEgCgpsZW5ndGgoaGlsb21vZGlmaWVkWywxXSktNTI4ICMgd2UgYXJlIGxlZnQgd2l0aCAyNTc1MiBlbnRyaWVzIG9mIGRhdGEgCgoKaGVhZChoaWxvbW9kaWZpZWQpCnRhaWwoaGlsb21vZGlmaWVkKQoKYGBgCgojIERlc2NyaXB0aXZlcyBvbiBhbGwgdmFyaWFibGVzIE1PRElGSUVEIERBVEEgU0VUOiBVc2luZyBGYXZzdGF0cwojIyBSaXZlciBGbG93IEZhdnN0YXRzCmBgYHtyfQpsaWJyYXJ5KG1vc2FpYykKZmF2c3RhdHMoaGlsb21vZGlmaWVkJGNtcykKYGBgCiMjIENITCBGYXZzdGF0cwpgYGB7cn0KZmF2c3RhdHMoaGlsb21vZGlmaWVkJENobFJGVSkKYGBgCiMjIFR1cmJpdGl0eSBGYXZzdGF0cwpgYGB7cn0KZmF2c3RhdHMoaGlsb21vZGlmaWVkJENvcnIuTlRVKQpgYGAKIyMgU2FsaW5pdHkgRmF2c3RhdHMKYGBge3J9CmZhdnN0YXRzKGhpbG9tb2RpZmllZCRzYWx0cHB0KQpmYXZzdGF0cyhoaWxvbW9kaWZpZWQkVGVtcEMpCmZhdnN0YXRzKGhpbG9tb2RpZmllZCREb3BlcikKYGBgCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQojIE1PRElGSUVEIERBVEEgU0VUIDIwMTMtMjAxNQojIERlc2NyaXB0aXZlczogUGxvdHMKCiMjIFJpdmVyIEZsb3cgTU9ESUZJRUQKYGBge3J9Cmxlbmd0aChoaWxvbW9kaWZpZWQkbG9nY21zW3doaWNoKGlzLm5hKGhpbG9tb2RpZmllZCRsb2djbXMpPT1UUlVFKV0pICMgTm8gTkFzLCBZQVkhCndoaWNoKGlzLm5hKGhpbG9tb2RpZmllZCRsb2djbXMpPT1UUlVFKQoKUml2ZXJGbG93TW9kIDwtIGdncGxvdChoaWxvbW9kaWZpZWQsICBhZXMoeCA9IGRhdGUsIHkgPSBhcy5udW1lcmljKGNtcykpKSArIAogIGdlb21fbGluZSgpCgpwcmludChSaXZlckZsb3dNb2QgKyBnZ3RpdGxlKCJSaXZlciBGbG93IikrbGFicyh4PSJUaW1lIiwgeSA9ICJSaXZlciBGbG93IC0gY3ViaWMgbWV0ZXJzIHBlciBzZWNvbmQiKSkKYGBgCiMjIENITCBNT0RJRklFRApgYGB7cn0Kc3VtKGlzLm5hKGhpbG9tb2RpZmllZCRDaGxSRlUpPT1UUlVFKSAjIDE4ODQgTkFzCiN3aGljaChpcy5uYShoaWxvbW9kaWZpZWQkQ2hsUkZVKT09VFJVRSkKIyBtYXgoYXMubnVtZXJpYyhuYS5vbWl0KGhpbG8kQ2hsUkZVKSkpICMgMTUuMwp3aGljaChhcy5udW1lcmljKGhpbG9tb2RpZmllZCRDaGxSRlUpPT0xNS4zKQpoaWxvWzM4OTc0LF0KCkNITE1vZCA8LSBnZ3Bsb3QoaGlsb21vZGlmaWVkLCAgYWVzKHggPSBkYXRlLCB5ID0gYXMubnVtZXJpYyhDaGxSRlUpKSkgKyAKICBnZW9tX2xpbmUoKQoKcHJpbnQoQ0hMTW9kICsgZ2d0aXRsZSgiQ2hsb3JvcGh5bGwgIikrbGFicyh4PSJUaW1lIiwgeSA9ICJDaGxvcm9waHlsbCAgLSByZWxhdGl2ZSBmbHVvcmVzY2VuY2UgdW5pdHMgKFJGVSkiKSkKYGBgCgoKIyBUdXJiaXRpdHkgTU9ESUZJRUQKYGBge3J9Cmxlbmd0aChoaWxvbW9kaWZpZWQkQ29yci5OVFVbd2hpY2goaXMubmEoaGlsb21vZGlmaWVkJENvcnIuTlRVKT09VFJVRSldKSAjIDI3MDQgTkFzCiMgbWF4KGFzLm51bWVyaWMobmEub21pdChoaWxvJENvcnIuTlRVKSkpICMgODguNAp3aGljaChhcy5udW1lcmljKGhpbG8kQ29yci5OVFUpPT04OC40KQpoaWxvWzMzMjQzLF0KClRVUkJNb2QgPC0gZ2dwbG90KGhpbG9tb2RpZmllZCwgIGFlcyh4ID0gZGF0ZSwgeSA9IGFzLm51bWVyaWMoQ29yci5OVFUpKSkgKyAKICBnZW9tX2xpbmUoKQoKcHJpbnQoVFVSQk1vZCArIGdndGl0bGUoIlR1cmJpZGl0eSAiKStsYWJzKHg9IlRpbWUiLCB5ID0gIlR1cmJpZGl0eSAtIE5lcGhlbG9tZXRyaWMgVHVyYmlkaXR5IFVuaXRzIChOVFUpIikpCmBgYAoKIyBTYWxpbml0eSBNT0RJRklFRApgYGB7cn0KbGVuZ3RoKGhpbG9tb2RpZmllZCRzYWx0cHB0W3doaWNoKGlzLm5hKGhpbG9tb2RpZmllZCRzYWx0cHB0KT09VFJVRSldKSAjIDIyNjcgTkFzCgpTQUxUTW9kIDwtIGdncGxvdChoaWxvbW9kaWZpZWQsICBhZXMoeCA9IGRhdGUsIHkgPSBhcy5udW1lcmljKHNhbHRwcHQpKSkgKyAKICBnZW9tX2xpbmUoKQoKcHJpbnQoU0FMVE1vZCArIGdndGl0bGUoIlNhbGluaXR5IikrbGFicyh4PSJUaW1lIiwgeSA9ICJTYWxpbml0eSAtIHVuaXQgcGFydHMgcGVyIHRob3VzYW5kIChQUFQpIikpCmBgYAojIFRlbXB1cmF0dXJlIE1PRElGSUVECmBgYHtyfQpsZW5ndGgoaGlsb21vZGlmaWVkJFRlbXBDW3doaWNoKGlzLm5hKGhpbG9tb2RpZmllZCRUZW1wQyk9PVRSVUUpXSkgIyAyMjY3IE5BcwoKVGVtcE1vZCA8LSBnZ3Bsb3QoaGlsb21vZGlmaWVkLCAgYWVzKHggPSBkYXRlLCB5ID0gYXMubnVtZXJpYyhUZW1wQykpKSArIAogIGdlb21fbGluZSgpCgpwcmludChUZW1wTW9kICsgZ2d0aXRsZSgiVGVtcGVyYXR1cmUiKStsYWJzKHg9IlRpbWUiLCB5ID0gIlRlbXBlcmF0dXJlIC0gQ2Vsc2l1cyIpKQpgYGAKIyBEaXNzb2x2ZWQgT3h5Z2VuIE1PRElGSUVECmBgYHtyfQpsZW5ndGgoaGlsb21vZGlmaWVkJERvcGVyW3doaWNoKGlzLm5hKGhpbG9tb2RpZmllZCREb3Blcik9PVRSVUUpXSkgIyAyMjY3IE5BcwoKVGVtcE1vZCA8LSBnZ3Bsb3QoaGlsb21vZGlmaWVkLCAgYWVzKHggPSBkYXRlLCB5ID0gYXMubnVtZXJpYyhEb3BlcikpKSArIAogIGdlb21fbGluZSgpCgpwcmludChUZW1wTW9kICsgZ2d0aXRsZSgiRGlzc29sdmVkIE94eWdlbiIpK2xhYnMoeD0iVGltZSIsIHkgPSAiRGlzc29sdmVkIE94eWdlbiBpbiBwZXJjZW50IG9mIHNhdHVyYXRpb24iKSkKYGBgCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQojIEhpc3RvZ3JhbXMgTU9ESUZJRUQgCgojIyBSaXZlciBGbG93IE1PRElGSUVECmBgYHtyfQpoaXN0KGFzLm51bWVyaWMoaGlsb21vZGlmaWVkJGNtcyksIG1haW4gPSAiSGlzdG9ncmFtIG9mIExvZyBSaXZlciBGbG93IiwgeGxhYiA9ICJMb2cgUml2ZXIgRmxvdyIsIGJyZWFrcyA9OTAsIHhsaW0gPSBjKDAsMTAwKSkKCiMgdGhpcyBsb29rcyBva2F5CmBgYAojIyBDSEwgTU9ESUZJRUQKYGBge3J9CiMgVkVSWSBza2V3ZWQKaGlzdChhcy5udW1lcmljKGhpbG9tb2RpZmllZCRDaGxSRlUpLCBtYWluID0gIkhpc3RvZ3JhbSBvZiBDaGxvcm9waHlsbCIsIHhsYWIgPSAiQ2hsb3JvcGh5bGwgIC0gcmVsYXRpdmUgZmx1b3Jlc2NlbmNlIHVuaXRzIChSRlUpIikKCiMgdGhpcyBsb29rcyBiZXR0ZXIKaGlzdChsb2coYXMubnVtZXJpYyhoaWxvbW9kaWZpZWQkQ2hsUkZVKSksIG1haW4gPSAiSGlzdG9ncmFtIG9mIExvZyBDaGxvcm9waHlsbCIsIHhsYWIgPSAiQ2hsb3JvcGh5bGwiKQojIG5vdCBzdXJlIHdoYXQgaGFwcGVucyB0byB1bml0cyB3aGVuIHRha2luZyB0aGUgbG9nIApgYGAKIyMgVHVyYml0aXR5IE1PRElGSUVECmBgYHtyfQojIFZFUlkgc2tld2VkCmhpc3QoYXMubnVtZXJpYyhoaWxvbW9kaWZpZWQkQ29yci5OVFUpLCBtYWluID0gIkhpc3RvZ3JhbSBvZiBUdXJiaWRpdHkiLCB4bGFiID0gIlR1cmJpZGl0eSAtIE5lcGhlbG9tZXRyaWMgVHVyYmlkaXR5IFVuaXRzIChOVFUpIikKCiMgdGhpcyBsb29rcyBiZXR0ZXIKaGlzdChsb2coYXMubnVtZXJpYyhoaWxvbW9kaWZpZWQkQ29yci5OVFUpKSwgbWFpbiA9ICJIaXN0b2dyYW0gb2YgTG9nIFR1cmJpZGl0eSIsIHhsYWIgPSAiVHVyYmlkaXR5IikKIyBub3Qgc3VyZSB3aGF0IGhhcHBlbnMgdG8gdW5pdHMgd2hlbiB0YWtpbmcgdGhlIGxvZyAKYGBgCiMjIFNhbGluaXR5IE1PRElGSUVECmBgYHtyfQojIHNrZXdlZApoaXN0KGFzLm51bWVyaWMoaGlsb21vZGlmaWVkJHNhbHRwcHQpLCBtYWluID0gIkhpc3RvZ3JhbSBvZiBTYWxpbml0eSIsIHhsYWIgPSAiU2FsaW5pdHkgLSB1bml0IHBhcnRzIHBlciB0aG91c2FuZCAoUFBUKSIpCgojIHRoaXMgaXMgd29yc3QhCmhpc3QobG9nKGFzLm51bWVyaWMoaGlsb21vZGlmaWVkJHNhbHRwcHQpKSwgbWFpbiA9ICJIaXN0b2dyYW0gb2YgTG9nIFNhbGluaXR5IiwgeGxhYiA9ICJTYWxpbml0eSIpCiMgbm90IHN1cmUgd2hhdCBoYXBwZW5zIHRvIHVuaXRzIHdoZW4gdGFraW5nIHRoZSBsb2cgCmBgYAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgojIFBsb3Qgd2l0aCBBTEwgVmFyIDIwMTMtMjAxNQpJdCBpcyBoYXJkIHRvIHNlZSB3aGF0IGlzIGdvaW5nIG9uIApgYGB7cn0KQWxsWWVhcnMgPC0gZ2dwbG90KGhpbG9tb2RpZmllZCwgIGFlcyh4ID0gZGF0ZSwgeSA9IGFzLm51bWVyaWMobG9nY21zKSkpICsgCiAgZ2VvbV9saW5lKCkrCiAgZ2VvbV9saW5lKGFlcyh5ID0gYXMubnVtZXJpYyhzYWx0cHB0KSksIGNvbG9yID0gImRhcmtyZWQiKSArCiAgZ2VvbV9saW5lKGFlcyh5ID0gYXMubnVtZXJpYyhDb3JyLk5UVSkpLCBjb2xvcj0iZGFya2dyZWVuIikgKwogIGdlb21fbGluZShhZXMoeT1hcy5udW1lcmljKENobFJGVSkpLGNvbG9yPSJibHVlIikKCnByaW50KEFsbFllYXJzICsgZ2d0aXRsZSgiSGlsbyBCYXkiKStsYWJzKHg9IlRpbWUiLCB5ID0gIlJpdmVyIEZsb3cgLSBjdWJpYyBtZXRlcnMgcGVyIHNlY29uZCIpKQoKYGBgCgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIyBEZXNjcmlwdGl2ZXMgYnkgU3Rvcm0KV2UgYXJlIHBpY2tpbmcgb25lIHN0b3JtIGZyb20gZWFjaCB5ZWFyLiBXZSBjYW4gaW5kaWNhdGUgYSBzdG9ybSBoYXMgb2NjdXJyZWQgYnkgdGhlIGV4dHJlbWUgZXZlbnRzIGluIHRoZSByaXZlciBmbG93IGRhdGEuIApXZSB3aWxsIG5vdCB1c2UgdGhlIGxvZyAod2hpY2ggaXMgbG9nYmFzZTEwKSBpbiBvcmRlciB0byBzZWUgdGhlIGV4dHJlbWUgZXZlbnRzCldoZW4gc2FsaW5pdHkgaXMgYmVsb3cgMzUgdGhpcyBhbHNvIGluZGljYXRlcyBhIHN0b3JtIGhhcyBvY2N1cnJlZC4gCgpXZSB3aWxsIGJyZWFrIHRoZSBkYXRhIHNldCBieSB5ZWFyIHRvIGZpbmQgdGhlIG1vc3QgZXh0cmVtZSBldmVudCBmb3IgZWFjaCB5ZWFyLiAKYGBge3J9CmhpbG8yMDEzIDwtIGhpbG9tb2RpZmllZFsxOjg3NjAsXQoKaGlsbzIwMTQgPC0gaGlsb21vZGlmaWVkWzg3NjE6MTc1MjAsXQoKaGlsbzIwMTUgPC0gaGlsb21vZGlmaWVkWzE3NTIxOmxlbmd0aChoaWxvbW9kaWZpZWRbLDFdKSxdCmBgYAoKIyAyMDEzIERhdGEgJiBQbG90CmBgYHtyfQojIG1heChhcy5udW1lcmljKGhpbG8yMDEzJGxvZ2NtcykpICMgdGhpcyBpcyBsb2cgYmFzZSAxMCAKIyBUaGlzIGlzIE5PVCB0aGUgbmF0dXJhbCBsb2cKbWF4KGFzLm51bWVyaWMoaGlsbzIwMTMkY21zKSkgIyAyMDcuMTg2IAp3aGljaChhcy5udW1lcmljKGhpbG8yMDEzJGNtcykgPT0gbWF4KGFzLm51bWVyaWMoaGlsbzIwMTMkY21zKSkpCgpoaWxvMjAxM1szNTUwLF0KIyBhbGwgdmFsdWVzIGZvciB0aGlzIHN0b3JtIGFyZSBOQQoKcGxvdDIwMTMgPC0gZ2dwbG90KGhpbG8yMDEzLCAgYWVzKHggPSBkYXRlLCB5ID0gYXMubnVtZXJpYyhjbXMpKSkgKyAKICBnZW9tX2xpbmUoY29sb3I9ImJsYWNrIikrCiAgZ2VvbV9saW5lKGFlcyh5ID0gYXMubnVtZXJpYyhzYWx0cHB0KSksIGNvbG9yID0gImRhcmtyZWQiKSArCiAgZ2VvbV9saW5lKGFlcyh5ID0gYXMubnVtZXJpYyhDb3JyLk5UVSkpLCBjb2xvcj0iZGFya2dyZWVuIikgKwogIGdlb21fbGluZShhZXMoeT1hcy5udW1lcmljKENobFJGVSkpLGNvbG9yPSJibHVlIikKCnByaW50KHBsb3QyMDEzICsgZ2d0aXRsZSgiMjAxMyIpK2xhYnMoeD0iVGltZSIsIHkgPSAiUml2ZXIgRmxvdyAtIGN1YmljIG1ldGVycyBwZXIgc2Vjb25kIikpCmBgYAoKIyMjIyBTcGxpdCAyMDEzIGludG8gNiBtb250aHMgdG8gZ2V0IGEgYmV0dGVyIHZpc3VhbApgYGB7cn0KIyBSMjAxMy4xIDwtIGdncGxvdChoaWxvMjAxM1sxOihsZW5ndGgoaGlsbzIwMTNbLDFdKS8yKSxdLCAgYWVzKHggPSBkYXRlLCB5ID0gYXMubnVtZXJpYyhjbXMpKSkgKyAKIyAgIGdlb21fbGluZShjb2xvcj0iYmxhY2siKSsKIyAgIGdlb21fbGluZShhZXMoeSA9IGFzLm51bWVyaWMoc2FsdHBwdCkpLCBjb2xvciA9ICJkYXJrcmVkIikgKwojICAgZ2VvbV9saW5lKGFlcyh5ID0gYXMubnVtZXJpYyhDb3JyLk5UVSkpLCBjb2xvcj0iZGFya2dyZWVuIikgKwojICAgZ2VvbV9saW5lKGFlcyh5PWFzLm51bWVyaWMoQ2hsUkZVKSksY29sb3I9ImJsdWUiKQojIHByaW50KFIyMDEzLjEgKyBnZ3RpdGxlKCJSaXZlciBGbG93IikrbGFicyh4PSJUaW1lIiwgeSA9ICJSaXZlciBGbG93IC0gY3ViaWMgbWV0ZXJzIHBlciBzZWNvbmQiKSkKIyBSMjAxMy4xK3lsaW0oMCw0MCkKIyAKIyAKIyBSMjAxMy4yIDwtIGdncGxvdChoaWxvMjAxM1sobGVuZ3RoKGhpbG8yMDEzWywxXSkvMik6bGVuZ3RoKGhpbG8yMDEzWywxXSksXSwgIGFlcyh4ID0gZGF0ZSwgeSA9IGFzLm51bWVyaWMoY21zKSkpICsgCiMgICBnZW9tX2xpbmUoY29sb3I9ImJsYWNrIikrCiMgICBnZW9tX2xpbmUoYWVzKHkgPSBhcy5udW1lcmljKHNhbHRwcHQpKSwgY29sb3IgPSAiZGFya3JlZCIpICsKIyAgIGdlb21fbGluZShhZXMoeSA9IGFzLm51bWVyaWMoQ29yci5OVFUpKSwgY29sb3I9ImRhcmtncmVlbiIpICsKIyAgIGdlb21fbGluZShhZXMoeT1hcy5udW1lcmljKENobFJGVSkpLGNvbG9yPSJibHVlIikKIyBwcmludChSMjAxMy4yICsgZ2d0aXRsZSgiUml2ZXIgRmxvdyIpK2xhYnMoeD0iVGltZSIsIHkgPSAiUml2ZXIgRmxvdyAtIGN1YmljIG1ldGVycyBwZXIgc2Vjb25kIikpCiMgUjIwMTMuMit5bGltKDAsNDApCmBgYAoKIyAyMDE0IERhdGEgJiBQbG90CmBgYHtyfQojIE1heCByaXZlciBmbG93IGluIHRoZSBvdmVyYWxsIGRhdGEgc2V0Cm1heChhcy5udW1lcmljKGhpbG8yMDE0JGNtcykpCm1heChhcy5udW1lcmljKGhpbG9tb2RpZmllZCRjbXMpKQoKd2hpY2goYXMubnVtZXJpYyhoaWxvMjAxNCRjbXMpID09IG1heChhcy5udW1lcmljKGhpbG8yMDE0JGNtcykpKQoKaGlsbzIwMTRbNTI2MyxdCgpSMjAxNCA8LSBnZ3Bsb3QoaGlsbzIwMTQsICBhZXMoeCA9IGRhdGUsIHkgPSBhcy5udW1lcmljKGxvZ2NtcykpKSArIAogIGdlb21fbGluZShjb2xvcj0iYmxhY2siKSsKICBnZW9tX2xpbmUoYWVzKHkgPSBhcy5udW1lcmljKHNhbHRwcHQpKSwgY29sb3IgPSAiZGFya3JlZCIpICsKICBnZW9tX2xpbmUoYWVzKHkgPSBhcy5udW1lcmljKENvcnIuTlRVKSksIGNvbG9yPSJkYXJrZ3JlZW4iKSArCiAgZ2VvbV9saW5lKGFlcyh5PWFzLm51bWVyaWMoQ2hsUkZVKSksY29sb3I9ImJsdWUiKQoKcHJpbnQoUjIwMTQgKyBnZ3RpdGxlKCIyMDE0IikrbGFicyh4PSJUaW1lIiwgeSA9ICJSaXZlciBGbG93IC0gY3ViaWMgbWV0ZXJzIHBlciBzZWNvbmQiKSkKYGBgCgoKIyAyMDE1IERhdGEgJiBQbG90CmBgYHtyfQptYXgoYXMubnVtZXJpYyhoaWxvMjAxNSRjbXMpKQoKd2hpY2goYXMubnVtZXJpYyhoaWxvMjAxNSRjbXMpID09IG1heChhcy5udW1lcmljKGhpbG8yMDE1JGNtcykpKQoKaGlsbzIwMTVbNjQ3NSxdCgpSMjAxNSA8LSBnZ3Bsb3QoaGlsbzIwMTUsICBhZXMoeCA9IGRhdGUsIHkgPSBhcy5udW1lcmljKGxvZ2NtcykpKSArIAogIGdlb21fbGluZShjb2xvcj0iYmxhY2siKSsKICBnZW9tX2xpbmUoYWVzKHkgPSBhcy5udW1lcmljKHNhbHRwcHQpKSwgY29sb3IgPSAiZGFya3JlZCIpICsKICBnZW9tX2xpbmUoYWVzKHkgPSBhcy5udW1lcmljKENvcnIuTlRVKSksIGNvbG9yPSJkYXJrZ3JlZW4iKSArCiAgZ2VvbV9saW5lKGFlcyh5PWFzLm51bWVyaWMoQ2hsUkZVKSksY29sb3I9ImJsdWUiKQoKcHJpbnQoUjIwMTUgKyBnZ3RpdGxlKCIyMDE1IikrbGFicyh4PSJUaW1lIiwgeSA9ICJSaXZlciBGbG93IC0gY3ViaWMgbWV0ZXJzIHBlciBzZWNvbmQiKSkKYGBgCgoKIyBTZXBhcmF0aW5nIHRoZSBEYXRhIGJ5IFN0b3JtIEV2ZW50cwo9PT09PT09CiMgU2VwYXJhdGluZyB0aGUgRGF0YSBieSBTdG9ybQoKYGBge3J9Cm91dGNvbWVzIDwtIGFzLm51bWVyaWMoaGlsb21vZGlmaWVkJHNhbHRwcHQpPDI1IAppbmRleC5sdDI1IDwtIHdoaWNoKG91dGNvbWVzPT1UUlVFKQoKcG9zcy5zdG9ybXMgPC0gaGlsb21vZGlmaWVkW2luZGV4Lmx0MjUsXQpwb3NzLnN0b3JtcwpgYGAKCgpgYGB7cn0Kb3V0Y29tZXMuMzUgPC0gYXMubnVtZXJpYyhoaWxvbW9kaWZpZWQkc2FsdHBwdCk8MzUgCmluZGV4Lmx0MzUgPC0gd2hpY2gob3V0Y29tZXM9PVRSVUUpCmluZGV4Lmx0MjUKcG9zcy5zdG9ybXMzNSA8LSBoaWxvbW9kaWZpZWRbaW5kZXgubHQyNSxdCnBvc3Muc3Rvcm1zMzUKCmhpbG9tb2RpZmllZCRkYXRlWzE2XQpgYGAKCmBgYHtyfQpzdG9ybS4xLjcuMTMgPC0gZ2dwbG90KGhpbG9tb2RpZmllZFsxNDU6MTY4LF0sICBhZXMoeCA9IGRhdGUsIHkgPSBhcy5udW1lcmljKGNtcykpKSArIAogIGdlb21fbGluZShjb2xvcj0iYmxhY2siKSsKICBnZW9tX2xpbmUoYWVzKHkgPSBhcy5udW1lcmljKHNhbHRwcHQpKSwgY29sb3IgPSAibGlnaHRzdGVlbGJsdWUxIikgKwogIGdlb21fbGluZShhZXMoeSA9IGFzLm51bWVyaWMoQ29yci5OVFUpKSwgY29sb3I9ImdyZXk2OSIpICsKICBnZW9tX2xpbmUoYWVzKHk9YXMubnVtZXJpYyhDaGxSRlUpKSxjb2xvcj0ia2hha2kiKQoKcHJpbnQoc3Rvcm0uMS43LjEzICsgZ2d0aXRsZSgiU3Rvcm0gMS83LzEzIikrbGFicyh4PSJUaW1lIikpCmBgYAoKIyBUcnlpbmcgdG8gbWFrZSB0aGUgUmFpbmZhbGwgcGxvdCBlYXNpZXIgdG8gcmVhZAoKYGBge3J9ClJpdmVyRmxvdzEgPC0gZ2dwbG90KGhpbG9tb2RpZmllZFsxOjEwMCxdLCAgYWVzKHggPSBkYXRlLCB5ID0gYXMubnVtZXJpYyhjbXMpKSkgKyAKICBnZW9tX2xpbmUoKQoKcHJpbnQoUml2ZXJGbG93ICsgZ2d0aXRsZSgiUml2ZXIgRmxvdyIpK2xhYnMoeD0iVGltZSIsIHkgPSAiUml2ZXIgRmxvdyAtIGN1YmljIG1ldGVycyBwZXIgc2Vjb25kIikpCmBgYAo9PT09PT09CmBgYHtyfQpnZXR3ZCgpCiMgd3JpdGUuY3N2KGhpbG9tb2RpZmllZCxmaWxlPSJIaWxvQmF5TkVXMTN0bzE1LmNzdiIsIHJvdy5uYW1lcyA9IEZBTFNFKQoKYGBgCgojIE5FVyBDaGFuZ2UgaW4gUml2ZXIgRmxvdyBDb2x1bW4gCgpgYGB7cn0KcG9zLm5lZyA8LSBhcy5udW1lcmljKGhpbG9tb2RpZmllZCRjbXMpIC0gMTAKCnN0YXJ0IDwtIHZlY3RvcigpCmVuZCA8LSB2ZWN0b3IoKQoKZm9yKGkgaW4gMTpsZW5ndGgocG9zLm5lZykpewogIGlmKGlzVFJVRShwb3MubmVnW2ldIDwgMCAmJiBwb3MubmVnW2krMV0gPiAwKSl7CiAgICBzdGFydFtpXSA8LSBpCiAgfWVsc2UgaWYoaXNUUlVFKHBvcy5uZWdbaV0gPiAwICYmIHBvcy5uZWdbaSsxXSA8IDApKXsKICAgIGVuZFtpXSA8LSBpCiAgICB9Cn0Kc3RhcnQKc3RhcnQ8LXN0YXJ0WyFpcy5uYShzdGFydCldCmxlbmd0aChzdGFydCkKZW5kCmVuZDwtZW5kWyFpcy5uYShlbmQpXQpsZW5ndGgoZW5kKQpgYGAKCgpgYGB7cn0KZm9yKGkgaW4gMTpsZW5ndGgoc3RhcnQpKXsKICBzdG9ybSA8LSBnZ3Bsb3QoaGlsb21vZGlmaWVkWyhzdGFydFtpXS0yNCk6KGVuZFtpXSsyNCksXSwgIGFlcyh4ID0gZGF0ZSwgeSA9IGFzLm51bWVyaWMoY21zKSkpICsKICBnZW9tX2xpbmUoY29sb3I9ImJsYWNrIikrCiAgZ2VvbV9saW5lKGFlcyh5ID0gYXMubnVtZXJpYyhDb3JyLk5UVSkpLCBjb2xvcj0iZ3JleTY5IikgKwogIGdlb21fbGluZShhZXMoeT1hcy5udW1lcmljKENobFJGVSkpLGNvbG9yPSJraGFraSIpCgpwcmludChzdG9ybSArIGdndGl0bGUoIlN0b3JtIDEvNy8xMyIpK2xhYnMoeD0iVGltZSIpKQp9CgpgYGAKCmBgYHtyfQpDaGFuZ2VSRiA8LSBmdW5jdGlvbih4ID0gdmVjdG9yKCkpewpjaGFuZ2UgPC0gYygwKQogIGZvcihpIGluIDE6KGxlbmd0aCh4KS0xKSl7CiAgICBjaGFuZ2VbaSsxXSA8LSB4W2ldLXhbaSsxXQogIH0KICByZXR1cm4oY2hhbmdlKQp9CmNoYW5nZS52ZWN0b3IgPC0gYyhDaGFuZ2VSRihhcy5udW1lcmljKGhpbG9tb2RpZmllZCRjbXMpKSkKY2hhbmdlLnZlY3RvcgpsZW5ndGgoQ2hhbmdlUkYoYXMubnVtZXJpYyhoaWxvbW9kaWZpZWQkY21zKSkpCmxlbmd0aChoaWxvbW9kaWZpZWQkY21zKSAjIHNhbWUgbGVuZ3RoCgpoaWxvbW9kaWZpZWQkY2hhbmdlQ01TIDwtIGNoYW5nZS52ZWN0b3IKCmhlYWQoaGlsb21vZGlmaWVkKQpgYGAKCmBgYHtyfQojIDEwLTExIG5lZ2F0aXZlIHN0YXJ0IG9mIHN0b3JtCiMgMTEtMTAgcG9zaXRpdmUgZW5kIG9mIHN0b3JtCgpwb3NpdGl2ZS5jaGFuZ2UgPC0gdmVjdG9yKCkKbmVnYXRpdmUuY2hhbmdlIDwtIHZlY3RvcigpCmluZGV4IDwtIHZlY3RvcigpCgoKZm9yKGkgaW4gMTpsZW5ndGgoaGlsb21vZGlmaWVkJGNtcykpewogIGlmIChoaWxvbW9kaWZpZWQkY2hhbmdlQ01TW2ldIDwgMCApewogICAgbmVnYXRpdmUuY2hhbmdlW2ldIDwtIGkKICB9ZWxzZXsKICAgIGlmKGhpbG9tb2RpZmllZCRjaGFuZ2VDTVNbaV0gPiAwKXsKICAgICAgcG9zdGl2ZS5jaGFuZ2VbaV0gPC0gaQogICAgfQogIH0KICBpZihoaWxvbW9kaWZpZWQkY21zW2ldID49IDEwICl7CiAgICBpbmRleFtpXSA8LSBpCiAgfQp9CmluZGV4CnBvc2l0aXZlLmNoYW5nZQpuZWdhdGl2ZS5jaGFuZ2UKbGVuZ3RoKHdoaWNoKGluZGV4ID4gMCkpIAoKc3Rvcm1zIDwtIHNvcnQoYyhwb3NpdGl2ZS5jaGFuZ2UsbmVnYXRpdmUuY2hhbmdlKSwgZGVjcmVhc2luZyA9IEZBTFNFKQpzdG9ybXMKaGlsb3N0b3JtcyA8LSBoaWxvbW9kaWZpZWRbc3Rvcm1zLF0KaGlsb3N0b3JtcwpgYGAKCmBgYHtyfQpzdG9ybSA8LSBnZ3Bsb3QoaGlsb3N0b3Jtc1s1MDoyNTAsXSwgIGFlcyh4ID0gZGF0ZSwgeSA9IGFzLm51bWVyaWMoY21zKSkpICsKICBnZW9tX2xpbmUoY29sb3I9ImJsYWNrIikrCiAgZ2VvbV9saW5lKGFlcyh5ID0gYXMubnVtZXJpYyhDb3JyLk5UVSkpLCBjb2xvcj0iZ3JleTY5IikgKwogIGdlb21fbGluZShhZXMoeT1hcy5udW1lcmljKENobFJGVSkpLGNvbG9yPSJraGFraSIpCgpwcmludChzdG9ybSArIGdndGl0bGUoIlN0b3JtIDEvNy8xMyIpK2xhYnMoeD0iVGltZSIpKQpgYGAKCmBgYHtyfQoKdmVjdG9yIDwtIHZlY3RvcigpCmZvcihpIGluIDE6bGVuZ3RoKHN0b3JtcykpewogIGlmKGlzVFJVRShhYnMoc3Rvcm1zW2ldLXN0b3Jtc1tpKzFdKSA+IDEwKSl7CiAgICBzdG9wIDwtIHN0b3Jtc1tpXQogIH1lbHNlewogICAgc3RvcCA8LSAwCiAgfQogIGlmKHN0b3AgPiAwKXsKICAgIHZlY3RvcltpXSA8LSBzdG9wCiAgfQp9CnZlY3Rvclt3aGljaChpcy5uYSh2ZWN0b3IpPT1GQUxTRSldCgpzdG9ybS4xLjcuMTMgPC0gZ2dwbG90KGhpbG9tb2RpZmllZFsxOjgwLF0sICBhZXMoeCA9IGRhdGUsIHkgPSBhcy5udW1lcmljKGNtcykpKSArCiAgZ2VvbV9saW5lKGNvbG9yPSJibGFjayIpKwogIGdlb21fbGluZShhZXMoeSA9IGFzLm51bWVyaWMoc2FsdHBwdCkpLCBjb2xvciA9ICJsaWdodHN0ZWVsYmx1ZTEiKSArCiAgZ2VvbV9saW5lKGFlcyh5ID0gYXMubnVtZXJpYyhDb3JyLk5UVSkpLCBjb2xvcj0iZ3JleTY5IikgKwogIGdlb21fbGluZShhZXMoeT1hcy5udW1lcmljKENobFJGVSkpLGNvbG9yPSJraGFraSIpCgpwcmludChzdG9ybS4xLjcuMTMgKyBnZ3RpdGxlKCJTdG9ybSAxLzcvMTMiKStsYWJzKHg9IlRpbWUiKSkKYGBgCgpgYGB7cn0Kc3RhcnRheGlzIDwtIHZlY3RvcigpCmVuZGF4aXMgPC0gdmVjdG9yKCkKaSA8LSAxCndoaWxlIChpIDw9IGxlbmd0aChjaGFuZ2UudmVjdG9yKSkgewogIGlmKGlzVFJVRShjaGFuZ2UudmVjdG9yW2ldIDwgMCkpewogICAgc3RhcnRheGlzW2ldIDwtIFJpdmVyRmxvd1tpXQogIH0KICBpIDwtIGkrMQp9CmJlZ2luPC13aGljaChpcy5uYShzdGFydGF4aXMpID09IEZBTFNFKQpiZWdpbgoKd2hpbGUgKGkgPD0gbGVuZ3RoKGNoYW5nZS52ZWN0b3IpKSB7CiAgaWYoaXNUUlVFKGNoYW5nZS52ZWN0b3JbaV0gPiAwKSl7CiAgICBlbmRheGlzW2ldIDwtIFJpdmVyRmxvd1tpXQogIH0KICBpIDwtIGkrMQp9CmVuZCA8LSB3aGljaChpcy5uYShlbmRheGlzKT09RkFMU0UpCgoKc3Rvcm0uMS43LjEzIDwtIGdncGxvdChoaWxvbW9kaWZpZWRbYmVnaW4sXSwgIGFlcyh4ID0gZGF0ZSwgeSA9IGFzLm51bWVyaWMoY21zKSkpICsgCiAgZ2VvbV9saW5lKGNvbG9yPSJibGFjayIpKwogIGdlb21fbGluZShhZXMoeSA9IGFzLm51bWVyaWMoQ29yci5OVFUpKSwgY29sb3I9ImdyZXk2OSIpICsKICBnZW9tX2xpbmUoYWVzKHk9YXMubnVtZXJpYyhDaGxSRlUpKSxjb2xvcj0ia2hha2kiKQoKcHJpbnQoc3Rvcm0uMS43LjEzICsgZ2d0aXRsZSgiU3Rvcm0gMS83LzEzIikrbGFicyh4PSJUaW1lIikpCgpgYGAKCmBgYHtyfQp3aGlsZSAoaSA8PSBsZW5ndGgoY2hhbmdlLnZlY3RvcikpIHsKICBpZihpc1RSVUUoY2hhbmdlLnZlY3RvcltpXSA8IDApKXsKICAgIHN0YXJ0YXhpc1tpXSA8LSBSaXZlckZsb3dbaV0KICAgIGkgPC0gaSsxCiAgfWVsc2V7CiAgICBpZihpc1RSVUUoY2hhbmdlLnZlY3RvcltpXSA+IDApKXsKICAgICAgZW5kYXhpc1tpXSA8LSBSaXZlckZsb3dbaV0KICAgIH0KICB9Cn0KYGBgCgo=